home *** CD-ROM | disk | FTP | other *** search
- *-------------------------------------------------------------------------------
- *-- Program...: PCONFIG.PRG
- *-- Programmer: Ken Mayer
- *-- Date......: 02/20/1992
- *-- Notes.....: Based on Bowen Moursund's (BOWEN) routines (PRNCONFG, etc.) that
- *-- he kindly sent me, the idea is to deal with a user who has never
- *-- set printers in dBASE, or a RUNTIME scenario, where the user
- *-- doesn't normally have the DBSETUP routines handy, nor the
- *-- printer driver files.
- *-- This routine uses: PDRIVERS.DBF, PDRIVERS.MDX, and DRIVERS.EXE
- *-------------------------------------------------------------------------------
-
- *-- first, see if the file PRINTER.MEM exists, if so, restore the contents,
- *-- if not, create memvars and write them to it ...
- if file("PRINTER.MEM")
- restore from printer additive
- else
- public p_driver1, p_driver2, p_port1, p_port2, p_pwait
- p_driver1 = "GENERIC.PR2 " && driver 1
- p_name1 = "* Generic printer driver" && printer name 1
- p_driver2 = "GENERIC.PR2 " && driver 2
- p_name2 = "* Generic printer driver" && printer name 2
- p_wait = .f. && printer pause
- p_port1 = "LPT1" && port for printer 1
- p_port2 = "LPT1" && port for printer 2
- save all like p_* to printer.mem && save to file ...
- endif
- cBrand = space(10)
-
- *-- now we have printer variables we need, let's copy them into temporary
- *-- variables, so we can allow the user to mess with them ... if the user
- *-- decides that they don't like the changes, they can escape and leave.
-
- cDriver1 = p_driver1 && current driver 1
- cDriver2 = p_driver2 && current driver 2
- cPName1 = p_name1 && current printer name 1
- cPName2 = p_name2 && 2
- cOPName1 = cPName1 && save data so we can return to it ...
- cOPName2 = cPName2
- cOld1 = cDriver1
- cOld2 = cDriver2
- cPort1 = p_port1 && ports ...
- cPort2 = p_port2
- lpWait = p_wait && wait status ...
-
- *-- open database file (contains names, etc. of drivers in the EXE file)
- use pdrivers order brand
-
- *-- define two popups ...
- define popup pBrand from 3,24 to 22,55 prompt field brand ;
- message "<F1> = Help Select Brand. <Esc> = Abort"
- on selection popup pBrand deactivate popup
- define popup pModel from 3,24 to 22,55 prompt field model ;
- message "<F1> = Help Select Model. <Esc> = Abort"
- on selection popup pModel deactivate popup
-
- *-- pressing <F2> will bring up the appropriate popup from PROC below
- on key label F2 do drivelis1 with varread()
-
- *-- activate picklist if an invalid printer driver is specified
- on readerror do drivelist
-
- *-- now to deal with the screen ...
- save screen to sOld
- cPconColor = set("ATTRIBUTES")
- clear
- x=scrnhead("&cStand2","Printer Setup")
- cCursor = set("CURSOR")
- set cursor off
- *-- set colors
- set color of message to &cStand2
- set color of highlight to &cStand
- set color of box to &cStand2
- *-- back to our original bit
- set border to single
- @6,8 to 18,71 && draw a border ...
- set border to double
- lOK = .t.
- do while .t. && loop ...
- @ 8,25 say "Printer driver 1: " get cDriver1 function "!";
- valid chekdrive(cDriver1);
- message "Enter name of driver for printer #1. <F2> = Picklist"
- @ 9,25 say cPName1
- @10,25 say "Printer driver 2: " get cDriver2 function "!";
- valid chekdrive(cDriver2);
- message "Enter name of driver for printer #2. <F2> = Picklist"
- @11,25 say cPName2
- @12,25 say "Port for Printer 1: " get cPort1;
- function "M LPT1,LPT2,LPT3,COM1,COM2";
- message "Press <Spacebar> to cycle choices, <Enter> to choose"
- @14,25 say "Port for Printer 2: " get cPort2;
- function "M LPT1,LPT2,LPT3,COM1,COM2";
- message "Press <Spacebar> to cycle choices, <Enter> to choose"
- @16,25 say "Page pause when printing? " get lPWait picture "Y";
- message "Enter <Y>es to pause for paper insertion, or <N>o."
- do center with 20,80,"&cStand2","Press <Esc> to abort ..."
- set cursor on
- read
- set cursor off
-
- if lastkey() = 27 && user pressed <Esc>
- lOK = .f.
- exit
- endif
-
- *-- if ok, we want to save all this back to disk ...
- if yesno2(.t.,"BL","Is this ok?","","","&cl_wind1")
- p_driver1 = cDriver1
- p_driver2 = cDriver2
- p_name1 = cPName1
- p_name2 = cPName2
- p_Port1 = cPort1
- p_Port2 = cPort2
- p_PWait = lPWait
- cSafety = set("SAFETY")
- set safety off
- save all like p_* to printer.mem
- set safety &cSafety
- lOK = .t.
- exit
- endif
-
- enddo && mail loop
-
- use && close database -- not needed now
- if lOK && user is satisfied with changes ...
- if cOld1 # p_driver1 .or. cOld2 # p_driver2 && we changed one of 'em
- do center with 20,80,"&cStand2","Extracting printer drivers"
- set console off
- *-- drivers is the Borland self extracting zip of drivers (1.5) ...
- if .not. file("&p_driver1") && does it already exist?
- run drivers.exe -o &p_driver1 > NUL && extract it
- endif
- if .not. file("&p_driver2") && does this one exist?
- run drivers.exe -o &p_driver2 > NUL && extract
- endif
- set console on
- endif && cOld ...
- endif && lOK
-
- *-- Cleanup/end of processing/RETURN to calling program or dot prompt
- release popup pBrand
- release popup pModel
- on key label F2
- on ReadError
- set cursor &cCursor
- restore screen from sOld
- release screen sOld
- *-- reset colors
- do ReColor with cPConColor
-
- RETURN
-
- *-------------------------------------------------------------------------------
- *-- End of Main processing, procedures below ...
- *-------------------------------------------------------------------------------
-
- PROCEDURE DriveLis1
-
- parameters cField
- *-- if editing one of the driver variables
- if cField = "CDRIVER1" .or. cField = "CDRIVER2"
- do drivelist
- else
- ?? chr(7) && beep at 'em
- endif
-
- RETURN
-
- PROCEDURE DriveList
-
- on key label F2 ?? chr(7) && beep, avoid recursion ...
- set cursor off
-
- *-- used to deal with the printer name ...
- if varread() = "CDRIVER1"
- lDriver1 = .t.
- else
- lDriver1 = .f.
- endif
-
- *-- do a shadow and all that ...
- save screen to sDrive
- do shadow with 3,24,22,55 && use shadow from PROC.PRG
- activate popup pBrand
- restore screen from sDrive
- lDone = .f.
- cBrand = prompt() && get the printer 'brand'
- if .not. IsBlank(cBrand) && if user didn't press <Esc>
- if cBrand = "* Generic printer driver"
- *-- clear the field and enter the file name
- keyboard (chr(26)+chr(25)+"GENERIC.PR2"+chr(13)) CLEAR
- lDone = .t.
- if lDriver1
- cPName1 = "* Generic printer driver"
- else
- cPName2 = "* Generic printer driver"
- endif
- endif && generic
- if cBrand = "* ASCII (No printer codes)"
- *-- clear the field and enter file name
- keyboard (chr(26)+chr(25)+"ASCII.PR2"+chr(13)) CLEAR
- lDone = .t.
- if lDriver1
- cPName1 = "* ASCII (No printer codes)"
- else
- cPName2 = "* ASCII (No printer codes)"
- endif
- endif
-
- *-- we have a brand, and it's not 'generic/ascii', get model
- if .not. lDone
- *-- put file in natural order and filter for brand ...
- set order to
- set filter to brand = cBrand
- goto top
- *-- shadow and popup
- do shadow with 3,24,22,55
- activate popup pModel
- cModel = left(prompt(),30)
- *-- if user selects a model
- if .not. IsBlank(cModel)
- set filter to
- *-- activate index for lookup
- set order to model
- *-- lookup the filename, clear field, and enter file name
- keyboard (chr(26)+chr(25)+trim(lookup(driver,cModel,model))+;
- iif(len(trim(driver))=12,"",chr(13))) clear
- *-- deal with printer 'name'
- if lDriver1
- cPName1 = trim(cBrand)+" - "+trim(cModel)
- else
- cPName2 = trim(cBrand)+" - "+trim(cModel)
- endif
- endif
- *-- return all this back to the way it was
- set filter to
- set order to brand
- goto top
- endif && .not. lDone
-
- endif && .not. IsBlank(cBrand)
-
- *-- reset
- on key label F2 do drivelis1 with varread()
- restore screen from sDrive
- release screen sDrive
- set color to &cStand
- set cursor on
- @ 9,25 clear to 9,50 && clear out old printer name
- @ 9,25 say cPName1 && display new ...
- @11,25 clear to 11,50 && ditto
- @11,25 say cPName2 && and again ...
-
- RETURN
-
- FUNCTION ChekDrive && check for a valid driver
-
- parameters cDriver
- set order to driver
- lReturn = seek(cDriver)
- set order to brand
- goto top
-
- RETURN lReturn
-
- *-------------------------------------------------------------------------------
- *-- End of Program: PCONFIG.PRG
- *-------------------------------------------------------------------------------